﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Fabricas;
using LM.InterfacesFabricas.Interfaces.Servicos;
using LM.Tela.Desktop.Properties;

namespace LM.Tela.Desktop.Formularios
{
    public partial class frmCadastroOperador : Form
    {
        public frmCadastroOperador()
        {
            InitializeComponent();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show(Resources.messageBox_dialog_exit, Resources.messageBox_title_Confirmação, MessageBoxButtons.YesNo, MessageBoxIcon.Information);
            if (result == DialogResult.Yes)
            {
                this.Close();
            } 
        }

        private void frmCadastroOperador_Load( object sender, EventArgs e )
        {
            CarregueItensJaCadastrados();
        }

        private void CarregueItensJaCadastrados()
        {
            grdOperadores.DataSource = FabricaGenerica.Crie<IServicoDeOperador>().ConsulteTodos();
        }

        private void btnSalvar_Click( object sender, EventArgs e )
        {
            if (txtSenha.Text == txtConfirmSenha.Text)
            {
                Salvar();
            }
            else
            {
                MessageBox.Show("Senhas informadas não são identicas", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        private void grdOperadores_CellDoubleClick( object sender, System.Windows.Forms.DataGridViewCellEventArgs e )
        {
            if (e.RowIndex >= 0)
            {
                var operador = ((IList<DtoOperador>)grdOperadores.DataSource)[e.RowIndex];

                txtCodigo.Text = operador.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNomeOperador.Text = operador.Nome;
                txtSenha.Text = operador.Senha;
            }
        }

        private void btnNovo_Click( object sender, EventArgs e )
        {
            PrepareTelaParaNovoRegistro();
        }

        private void btnExcluir_Click( object sender, EventArgs e )
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Operador não selecionada para edição.");
            }
            else
            {
                var servicoDeOperador = FabricaGenerica.Crie<IServicoDeOperador>();
                servicoDeOperador.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void Salvar()
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var operador = new DtoOperador { Codigo = codigo, Nome = txtNomeOperador.Text, Senha = txtSenha.Text,Status = false};

            var servicoDeOperador = FabricaGenerica.Crie<IServicoDeOperador>();

            if (!EmEdicao())
                servicoDeOperador.Cadastre(operador);
            else
                servicoDeOperador.Atualize(operador);

            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNomeOperador.Text = string.Empty;
            txtSenha.Text = string.Empty;
            txtConfirmSenha.Text = string.Empty;
        }
    }
}
